﻿using System;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShoppingCart.Business.Entity;
using ShoppingCart.Business.Logic;
using ShoppingCart.WebSite.Code;

namespace ShoppingCart.WebSite.Admin
{
    public partial class Ubigeo : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            CargarDepartamentos();
        }

        protected void GvDepartamentosSelectedIndexChanged(object sender, EventArgs e)
        {
            var chkEstado = (CheckBox)gvDepartamentos.SelectedRow.FindControl("ckbEstado");
            chkEstado.Checked = true;
            var idDepartamento = Convert.ToInt32(gvDepartamentos.SelectedRow.Cells[1].Text);
            CargarProvincias(idDepartamento);
        }

        protected void GvProvinciasSelectedIndexChanged(object sender, EventArgs e)
        {
            var chkEstado = (CheckBox)gvDepartamentos.SelectedRow.FindControl("ckbEstado");
            chkEstado.Checked = true;
            var idProvincia = Convert.ToInt32(gvProvincias.SelectedRow.Cells[1].Text);
            CargarDistritos(idProvincia);
        }

        protected void BtnGuardarDepartamentosClick(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvDepartamentos.Rows)
            {
                var idDepartamento = Convert.ToInt32(row.Cells[1].Text);
                var departamento = DepartamentoManager.Instancia.Obtener(idDepartamento);
                departamento.Estado = Convert.ToBoolean(((CheckBox)row.FindControl("ckbEstado")).Checked);
                DepartamentoManager.Instancia.Modificar(departamento);
            }
            litMensaje1.Text = @"Estado de departametos actualizados satisfactoriamente.";
        }

        protected void BtnGuardarProvinciasClick(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvProvincias.Rows)
            {
                var idProvincia = Convert.ToInt32(row.Cells[1].Text);
                var provincia = ProvinciaManager.Instancia.Obtener(idProvincia);
                provincia.Estado = Convert.ToBoolean(((CheckBox)row.FindControl("ckbEstado")).Checked);
                ProvinciaManager.Instancia.Modificar(provincia);
            }
            litMensaje2.Text = @"Estado de provincias actualizados satisfactoriamente.";
        }

        protected void BtnGuardarDistritosClick(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvDistritos.Rows)
            {
                var idDistrito = Convert.ToInt32(row.Cells[0].Text);
                var distrito = DistritoManager.Instancia.Obtener(idDistrito);
                distrito.Estado = Convert.ToBoolean(((CheckBox)row.FindControl("ckbEstado")).Checked);
                DistritoManager.Instancia.Modificar(distrito);
            }
            litMensaje3.Text = @"Estado de distritos actualizados satisfactoriamente.";
        }

        private void CargarDepartamentos()
        {
            var departamentos = DepartamentoManager.Instancia.Listar(true);
            BindControl<Departamento>.BindGrid(gvDepartamentos, departamentos);
            litMensaje1.Text = string.Empty;
            if (departamentos.Count != 0)
            {
                CargarProvincias(departamentos.First().IdDepartamento);
            }
            else
            {
                gvProvincias.DataBind();
                gvDistritos.DataBind();
            }
        }

        private void CargarProvincias(int idDepartamento)
        {
            var provincias = ProvinciaManager.Instancia.ListarPorIdDepartamento(idDepartamento);
            BindControl<Provincia>.BindGrid(gvProvincias, provincias);
            litMensaje2.Text = string.Empty;
            if (provincias.Count != 0)
            {
                CargarDistritos(provincias.First().IdProvincia);
            }
            else
            {
                gvDistritos.DataBind();
            }
        }

        private void CargarDistritos(int idProvincia)
        {
            var distritos = DistritoManager.Instancia.ListarPorIdProvincia(idProvincia);
            BindControl<Distrito>.BindGrid(gvDistritos, distritos);
            litMensaje3.Text = string.Empty;
        }
    }
}
